﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;

namespace Assignment_10
{
    class ConnectDB
    {
        SqlConnection con;
        SqlDataAdapter da;
        DataSet ds;
        BindingSource bs;

        public ConnectDB()
        {
            try
            {
                con = new SqlConnection(Properties.Resources.sCN);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        // Load dữ liệu cho Form Login
        public void LoadDataLogin(ComboBox cboId, ComboBox cboName)
        {
            da = new SqlDataAdapter("Select * From tbEmployee", con);
            new SqlCommandBuilder(da);

            ds = new DataSet(); // Dataset của combobox ID

            // Fill dữ liệu vào dataset vừa tạo
            da.Fill(ds, "ColumnEmpID"); 
            da.Fill(ds, "ColumnEmpName");

            // Tạo 2 BindingSource cho 2 combobox
            BindingSource bs1 = new BindingSource(); // Bindingsource của combobox ID
            BindingSource bs2 = new BindingSource(); // Bindingsource của combobox Name

            // Lấy source cho 2 bindingsource
            bs1.DataSource = ds.Tables["ColumnEmpID"];
            bs2.DataSource = ds.Tables["ColumnEmpName"];

            // Load dữ liệu vào combobox Id, set value khi lấy là EmpName để so sánh với combo box Name
            cboId.DataSource = bs1;
            cboId.DisplayMember = "EmpId";
            cboId.ValueMember = "EmpName";

            // Load dữ liệu vào combobox Name, set value khi lấy là EmpName để so sánh với combo box Id
            cboName.DataSource = bs2;
            cboName.DisplayMember = "EmpName";
            cboName.ValueMember = "EmpName";
        }

        // Kiểm tra đăng nhập đúng hay sai
        public Boolean CheckLogin(ComboBox cboId, ComboBox cboName, string pass)
        {
            string nameInCbId = cboId.SelectedValue.ToString(); // Lấy value khi select combo box Id (value là EmpName)
            string nameInCbName = cboName.SelectedValue.ToString();  // Lấy value khi select comboobx Name (value là EmpName)
            string passInCbId = ds.Tables["ColumnEmpID"].Rows[cboId.SelectedIndex][2].ToString();

            //-------- Test value input
            //MessageBox.Show("Value in ID: " + nameInCbId + "\nValue in Name: " + nameInCbName 
            //    + "\nPass in ID: " + passInCbId
            //    + "\nPass in textbox: " + pass);
            //----------------------------

            if (nameInCbId != nameInCbName || passInCbId != pass)
            {
                return false;
            }

            return true;
        }

        // Kiểm tra user có phải là admin không
        public Boolean CheckIsAdmin(int index)
        {
            if (ds.Tables["ColumnEmpID"].Rows[index]["isAdmin"].ToString() == "True") // Kiểm tra xem phải cột isAdmin là True không (là admin)
            {
                return true;
            }
            return false;
        }

        // Load dử liệu cho Form Admin
        public void LoadDataFrAdmin(DataGridView dgv)
        {
            // Lấy tất cả dữ liệu bảng Employee với quyền không phải là admin
            da = new SqlDataAdapter("SELECT * FROM tbEmployee WHERE isAdmin = 'False'", con);
            new SqlCommandBuilder(da);
            ds = new DataSet();

            // Fill dữ liệu vào dataset với tên table là "Employee"
            da.FillSchema(ds, SchemaType.Mapped);
            da.Fill(ds, "Employee");

            // Tạo Bingding Source mới
            bs = new BindingSource();

            // Lấy source cho bs từ dataset
            bs.DataSource = ds.Tables["Employee"];

            // Lấy source cho Grid từ Binding source
            dgv.DataSource = bs;
        }

        public void SetBindingSource(TextBox txt, string s1, string s2)
        {
            txt.DataBindings.Add(s1, bs, s2);
        }

        public BindingSource GetBSource()
        {
            return this.bs;
        }

        //public void Add()
        //{
        //    try
        //    {

        //    }
        //    catch (Exception ex)
        //    {
        //        Cancel();
        //        MessageBox.Show("Cannot delete\n" + ex.Message);
        //    }
        //}

        public void Delete()
        {
            try
            {
               // bs.RemoveCurrent();
                da.Update(ds, "Employee");
                ds.AcceptChanges();
            }
            catch (Exception ex)
            {
                Cancel();
                MessageBox.Show("Cannot delete\n" + ex.Message);
            }
        }

        public void Update(string s)
        {
            try
            {
                //ds.Tables["Employee"].Rows[ds.Tables["Employee"].Rows.Count + 1]["isAdmin"] = "'False'";
                bs.EndEdit();
                da.Update(ds, "Employee");
                ds.AcceptChanges();

                if (s == "Add")
                {
                    MessageBox.Show("Insert new User successfull", "Admin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("Update User successfull", "Admin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                Cancel();
                MessageBox.Show("Cannot Update\n" + ex.Message);
            }
        }

        public void Cancel()
        {
            bs.CancelEdit();
            ds.RejectChanges();
        }
 
    }
}
